﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using Torneo.Entidades;

namespace Torneo.InterfazServicios
{    
    [ServiceContract]
    public interface IService
    {
        #region Usuarios
        [OperationContract]
        void CrearUsuario(Usuario usuario);

        [OperationContract]
        void EliminarUsuario(Usuario usuario);

        [OperationContract]
        List<Usuario> ObtenerUsuarios();

        [OperationContract]
        Usuario AutenticarUsuario(string user, string password);

        [OperationContract]
        void ModificarUsuario(Usuario usuario);

        [OperationContract]
        Usuario ObtenerUsuariosPorId(int id);
        #endregion
        
        #region Jugadores
        [OperationContract]
        void CrearJugador(Jugador jugador);

        [OperationContract]
        void EliminarJugador(Jugador jugador);

        [OperationContract]
        List<Jugador> ObtenerJugadores();
        
        [OperationContract]
        void ModificarJugador(Jugador jugador);

        [OperationContract]
        Jugador ObtenerJugadorPorId(int id);

        [OperationContract]
        List<Jugador> ObtenerJugadoresSinEmparejamiento();
        #endregion

        #region Resultados

        [OperationContract]
        void AgregarResultado(Resultado resultado);

        [OperationContract]
        Resultado ObtenerResultado(Emparejamiento emparejamiento);

        [OperationContract]
        void ModificarResultado(Resultado resultado);

        [OperationContract]
        List<Resultado> ObtenerTodos();
        #endregion

        #region Emparejamientos
        [OperationContract]
        void CrearEmparejamiento(Emparejamiento emparejamiento);

        [OperationContract]
        void EliminarEmparejamiento(Emparejamiento emparejamiento);

        [OperationContract]
        List<Emparejamiento> ObtenerEmparejamientos();
        
        [OperationContract]
        void ModificarEmparejamiento(Emparejamiento emparejamiento);

        [OperationContract]
        Emparejamiento ObtenerEmparejamientoPorId(int id);

        [OperationContract]
        List<Emparejamiento> ObtenerEmparejamientosSinResultado();
        #endregion

        #region WP

        [OperationContract]
        List<EmparejamientoWP> ObtenerEmparejamientosWP();

        [OperationContract]
        List<ResultadoWP> ObtenerResultadoWP();

        #endregion
    }
}
